package main

import "fmt"

type IPeople interface {
	hello()
}

type People struct {

}

func (p *People) hello() {
	fmt.Println("githubcom/meetbetter")
}

func errFunc1(in int) *People {
	if in == 0 {
		fmt.Println("importtantFunc返回了一个nil")
		return nil
	}else {
		fmt.Println("importantFunc返回了一个非nil值")
		return &People{}
	}
}

func main() {
	var i IPeople
	in := 0
	i = errFunc1(in)

	if i == nil {
		fmt.Println("哈哈，外部接收到也是nil")
	}else {
		fmt.Println("咦，外部接收到不是nil哦")
		fmt.Printf("%v, %T\n", i, i)
	}

}

/**
将 nil 赋值给*People后，再将*People赋值给 interface， *People本身是个指向nil的指针，但将其赋给接口时只是接口中的值为nil,
但是接口中类型信息为 *main.People而不是nil,所以这个接口不是nil

golang中interface类型包含两个部分，值信息和类型信息，只有interface的值和类型都为nil时，interface才为nil

正确处理接口返回值的方法，是直接将nil赋值给interface
 */
